# 这个函数要写在主函数的上面,否则不能调用
def func():
    print("hello world")

def func2(num):
    num = 2
    print(num)

def func3(lst):
    lst.append(4)
    print(lst)

def func4(a,b = 2):
    print(a,'\t',b)
    return a + b


def func5(*args):
    print(type(args))
    print(args)
    for a in args:
        print(a)

    lst = list(args)
    print(type(lst))
    print(lst)


total = 100
def plus(arg1,arg2):
    global total 
    total = arg1 + arg2


from typing import Union, Optional

# name 参数的类型被指定为 Union[str, bytes]，表示它可以是字符串或字节串。
def greet(name: Union[str, bytes]) -> None:
    print(f"Hello, {name}!")

# y 参数的类型被指定为 Optional[int]，表示它可以是整数或 None
def add(x: int, y: Optional[int] = 0) -> int:
    return x + y

# 主函数
if __name__ == "__main__":
    func()

    num = 1
    func2(num)  # 参数被拷贝了一份
    print(num)  # num 的值没有变

    # 参数是可变的，实际参数会被改变
    lst = [1,2,3]
    func3(lst) # 函数体内添加了一个4
    print(lst) # 原来的变量也会添加一个4

    # 默认参数
    sum = func4(2)
    print(sum)

    sum = func4(2,4)
    print(sum)

    sum = func4(b=2,a=4)
    print(sum)

    func5(1,2,3,4)   # <class 'tuple'>

    func5([1,2,3]) # 把列表，当成一个元素，放到了元组里面 ([1, 2, 3],) [[1, 2, 3]]

    print(total)
    plus(1,2)
    print(total)






